package com.fau.template.dao;

import java.io.Serializable;
import java.util.List;

import com.fau.template.dao.impl.BaseDaoImpl;
import com.fau.template.util.Page;

/**
 * @desc 数据访问层
 * @datetime 2014年7月30日 下午2:45:18
 */
public interface IBaseDao {

	/**
	 * @desc 刷新Hibernate缓存
	 * @author liy
	 * @datetime 2015年5月11日 15:09:22
	 */
	void flush();
	
	/**
	 * @desc 通过主键id查询对象
	 * @return Object 没有查询到返回null
	 * @author liny
	 * @datetime 2014年8月4日 上午10:35:26
	 */
	Object getObject(Class<?> c, Serializable id);
	
	/**
	 * @desc 通过hql查询对象
	 * @param hql hql语句
	 * @param value 参数
	 * @return Object 没有查询到返回null
	 * @author liy
	 * @datetime 2015年5月11日 15:34:04
	 */
	Object getObjectByHql(String hql, Object... value);
	
	/**
	 * @desc 通过hql更新表（在批量更新时不推荐使用）
	 * @return boolean
	 * @author liny
	 * @datetime 2014年8月4日 上午10:40:32
	 */
	boolean updateByHql(String hql, Object... value);
	
	/**
	 * @desc 通过sql更新、删除数据 （在批量插入、修改、删除时推荐使用）
	 * @param sql sql语句
	 * @param value 参数
	 * @return boolean
	 * @author liy
	 * @datetime 2015年4月15日,下午3:19:51
	 */
	boolean updateBySql(String sql, Object... value);
	
	/**
	 * @desc 更新对象
	 * @author liy
	 * @datetime 2015年5月11日 16:57:45
	 */
	void updateObject(Object o);
	
	/**
	 * @desc 插入对象
	 * @author liy
	 * @datetime 2015年5月11日 16:59:26
	 */
	void insertObject(Object o);
	
	/**
	 * @desc 删除对象（在批量删除时不推荐使用）
	 * @author liny
	 * @datetime 2014年8月4日 上午10:50:54
	 */
	void deleteObject(Object o);
	
	/**
	 * @desc 通过hql查询数据集合
	 * @param hql hql语句
	 * @param rows 指定集合长度，当是null时查询集合整体
	 * @param value 条件参数
	 * @author liny
	 * @datetime 2014年8月4日 上午10:51:14
	 */
	List<?> getListByHql(String hql, Integer rows, Object... value);
	
	/**
	 * @desc 通过hql查询数据数量
	 * @param hql hql语句
	 * @param value 条件参数
	 * @return int 数据个数
	 * @author liy
	 * @datetime 2015年5月11日 17:26:32
	 */
	int getIntCount(String hql, Object... value);

	/**
	 * @desc 分页查询（根据索引）
	 * @param currentPage 当前页
	 * @param numPerPage 每页记录数量
	 * @param statusHql 查询记录的HQL语句
	 * @param countHql 查询记录数目的HQL语句
	 * @param objectList 参数
	 * @return Page
	 * @author liny,liy
	 * @datetime 2015年5月11日 17:51:40
	 */
	Page getPage(int currentPage, int numPerPage, String statusSql, String countHql, List<Object> objectList);

	/**
	 * @desc 开启缓存
	 * @param cacheQuery
	 * @author liny
	 * @datetime 2014年11月24日 下午5:39:52
	 */
	BaseDaoImpl setCacheQuery(boolean cacheQuery);
}
